package com.ruoyi.basebill.service.impl;

import java.math.BigDecimal;
import java.util.List;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.basebill.DTO.GzffEntryInfo;
import com.ruoyi.basebill.DTO.GzffInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.basebill.domain.WfzGzftentry;
import com.ruoyi.basebill.mapper.WfzGzftMapper;
import com.ruoyi.basebill.domain.WfzGzft;
import com.ruoyi.basebill.service.IWfzGzftService;

/**
 * 工资分摊Service业务层处理
 * 
 * @author xiefeng
 * @date 2022-12-14
 */
@Service
public class WfzGzftServiceImpl implements IWfzGzftService 
{
    @Autowired
    private WfzGzftMapper wfzGzftMapper;

    /**
     * 查询工资分摊
     * 
     * @param fid 工资分摊主键
     * @return 工资分摊
     */
    @Override
    public WfzGzft selectWfzGzftByFid(Long fid)
    {
        return wfzGzftMapper.selectWfzGzftByFid(fid);
    }

    /**
     * 查询工资分摊列表
     * 
     * @param wfzGzft 工资分摊
     * @return 工资分摊
     */
    @Override
    public List<WfzGzft> selectWfzGzftList(WfzGzft wfzGzft)
    {
        return wfzGzftMapper.selectWfzGzftList(wfzGzft);
    }

    /**
     * 新增工资分摊
     * 
     * @param wfzGzft 工资分摊
     * @return 结果
     */
    @Transactional
    @Override
    public int insertWfzGzft(WfzGzft wfzGzft)
    {
        int rows = wfzGzftMapper.insertWfzGzft(wfzGzft);
        insertWfzGzftentry(wfzGzft);
        return rows;
    }

    /**
     * 修改工资分摊
     * 
     * @param wfzGzft 工资分摊
     * @return 结果
     */
    @Transactional
    @Override
    public int updateWfzGzft(WfzGzft wfzGzft)
    {
        wfzGzftMapper.deleteWfzGzftentryByFparentid(wfzGzft.getFid());
        insertWfzGzftentry(wfzGzft);
        return wfzGzftMapper.updateWfzGzft(wfzGzft);
    }

    /**
     * 批量删除工资分摊
     * 
     * @param fids 需要删除的工资分摊主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteWfzGzftByFids(Long[] fids)
    {
        wfzGzftMapper.deleteWfzGzftentryByFparentids(fids);
        return wfzGzftMapper.deleteWfzGzftByFids(fids);
    }

    /**
     * 删除工资分摊信息
     * 
     * @param fid 工资分摊主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteWfzGzftByFid(Long fid)
    {
        wfzGzftMapper.deleteWfzGzftentryByFparentid(fid);
        return wfzGzftMapper.deleteWfzGzftByFid(fid);
    }

    @Override
    public String importGzft(WfzGzft wfzGzft) {
        GzffInfo gzftInfo = new GzffInfo();
        String fnumber = wfzGzft.getFnumber(); //单据编码
        String fcompany = wfzGzft.getFcompany(); //公司
        String fperiod = wfzGzft.getFperiod();//薪酬期间
        BigDecimal fzrs = wfzGzft.getFzrs(); //总人数
        BigDecimal fglf = wfzGzft.getFglf();  //关联方人数
        BigDecimal fnscbzxrs = wfzGzft.getFnscbzxrs();//合并纳税成本中心人数
        String fvourtype = wfzGzft.getFvourtype(); //凭证字


        gzftInfo.setNumber(fnumber);
        gzftInfo.setCompany(fcompany);
        gzftInfo.setPeriod(fperiod);
        gzftInfo.setZrs(fzrs);
        gzftInfo.setGlf(fglf);
        gzftInfo.setNscbzxrs(fnscbzxrs);
        gzftInfo.setVourType(fvourtype);
        gzftInfo.setSourcebillid(String.valueOf(wfzGzft.getFid()));

        List<WfzGzftentry> wfzGzftentryList = wfzGzft.getWfzGzftentryList();
        ArrayList<GzffEntryInfo> entry = new ArrayList<>();
        //组装分录数据
        for (int j=0;j<wfzGzftentryList.size();j++){
            WfzGzftentry wfzGzftentry = wfzGzftentryList.get(j);
            String fcostnumber = wfzGzftentry.getFcostnumber();//成本中心
            String fcostcompany = wfzGzftentry.getFcostcompany();//成本中心所属财务组织
            BigDecimal fyfgz = wfzGzftentry.getFyfgz(); //应发工资
            BigDecimal fgryl = wfzGzftentry.getFgryl(); //个人养老
            BigDecimal fgryy = wfzGzftentry.getFgryy();//个人医疗
            BigDecimal fgrsy = wfzGzftentry.getFgrsy(); //个人失业
            BigDecimal fgjj = wfzGzftentry.getFgjj();//公积金
            BigDecimal fgrgjj = wfzGzftentry.getFgrgjj();//个人公积金
            BigDecimal fbkgryl = wfzGzftentry.getFbkgryl();//补扣个人养老
            BigDecimal fbkgryy = wfzGzftentry.getFbkgryy();//补扣个人医疗
            BigDecimal fbkgrsy = wfzGzftentry.getFbkgrsy();//补扣个人失业
            BigDecimal fbkgrzf = wfzGzftentry.getFbkgrzf();//补扣个人住房
            BigDecimal fgrgfjf = wfzGzftentry.getFgrgfjf();//个人工费经费
            BigDecimal fjrfl = wfzGzftentry.getFjrfl();//节日福利
            BigDecimal fgwbnf = wfzGzftentry.getFgwbnf();//高温/保暖费
            BigDecimal ffhbfl = wfzGzftentry.getFfhbfl();//非货币性福利
            BigDecimal fsssdf = wfzGzftentry.getFsssdf();//代扣宿舍水电费
            BigDecimal fzkk = wfzGzftentry.getFzkk();//质扣款
            BigDecimal fgrsds = wfzGzftentry.getFgrsds();//个人所得税

            BigDecimal ffk = wfzGzftentry.getFfk();//罚款
            BigDecimal fsfhj = wfzGzftentry.getFsfhj();//实发合计
            String fyhzh = wfzGzftentry.getFyhzh();//银行账号
            String fjsfs = wfzGzftentry.getFjsfs();//组织间结算方式
            String fcbzxffjg = wfzGzftentry.getFcbzxffjg();//成本中心发放工资金融机构
            String fcbzxxz = wfzGzftentry.getFcbzxxz();//成本中心属性
            String fsscwzz = wfzGzftentry.getFsscwzz();//所属财务组织
            String fvourtype1 = wfzGzftentry.getFvourtype();//凭证字

            GzffEntryInfo gzftEntryInfo = new GzffEntryInfo();
            gzftEntryInfo.setCostCenter(fcostnumber);
            gzftEntryInfo.setCostcompany(fcostcompany);
            gzftEntryInfo.setYfgz(fyfgz);
            gzftEntryInfo.setGryl(fgryl);
            gzftEntryInfo.setGryy(fgryy);
            gzftEntryInfo.setGrsy(fgrsy);
            gzftEntryInfo.setGjj(fgjj);
            gzftEntryInfo.setGrgjj(fgrgjj);
            gzftEntryInfo.setBkgryl(fbkgryl);
            gzftEntryInfo.setBkgryy(fbkgryy);
            gzftEntryInfo.setBkgrsy(fbkgrsy);
            gzftEntryInfo.setBkgrzf(fbkgrzf);
            gzftEntryInfo.setJrfl(fjrfl);
            gzftEntryInfo.setGwbnf(fgwbnf);

            gzftEntryInfo.setFhbfl(ffhbfl);
            gzftEntryInfo.setSssdf(fsssdf);
            gzftEntryInfo.setFk(ffk);
            gzftEntryInfo.setGrsds(fgrsds);
            gzftEntryInfo.setSfhj(fsfhj);
            gzftEntryInfo.setJsfs(fjsfs);
            gzftEntryInfo.setYhzh(fyhzh);
            gzftEntryInfo.setCbzxxz(fcbzxxz);
            gzftEntryInfo.setSscwzz(fsscwzz);
            gzftEntryInfo.setGrgfjf(fgrgfjf);
            gzftEntryInfo.setZkk(fzkk);
            gzftEntryInfo.setCbzxffjg(fcbzxffjg);
            gzftEntryInfo.setVourType(fvourtype1);
            entry.add(gzftEntryInfo);

        }

        gzftInfo.setEntry(entry);


        //转化为json
        String json = JSONObject.toJSONString(gzftInfo);

        return json;
    }

    /**
     * 新增工资分摊分录信息
     * 
     * @param wfzGzft 工资分摊对象
     * @param wfzGzft 工资分摊对象
     */
    public void insertWfzGzftentry(WfzGzft wfzGzft)
    {
        List<WfzGzftentry> wfzGzftentryList = wfzGzft.getWfzGzftentryList();
        Long fid = wfzGzft.getFid();
        if (StringUtils.isNotNull(wfzGzftentryList))
        {
            List<WfzGzftentry> list = new ArrayList<WfzGzftentry>();
            for (WfzGzftentry wfzGzftentry : wfzGzftentryList)
            {
                wfzGzftentry.setFparentid(fid);
                list.add(wfzGzftentry);
            }
            if (list.size() > 0)
            {
                wfzGzftMapper.batchWfzGzftentry(list);
            }
        }
    }
}
